package 简单.双指针;

/**
 * 给你一个下标从 0 开始的整数数组 nums 。如果两侧距 i 最近的不相等邻居的值均小于 nums[i] ，
 * 则下标 i 是 nums 中，某个峰的一部分。类似地，如果两侧距 i 最近的不相等邻居的值均大于 nums[i] ，
 * 则下标 i 是 nums 中某个谷的一部分。对于相邻下标 i 和 j ，如果 nums[i] == nums[j] ， 则认为这两下标属于 同一个 峰或谷。
 * 注意，要使某个下标所做峰或谷的一部分，那么它左右两侧必须 都 存在不相等邻居。
 * 返回 nums 中峰和谷的数量。
 *
 * @ https://leetcode.cn/problems/count-hills-and-valleys-in-an-array/description/?envType=daily-question&envId=2025-07-27
 * @date 2025/07/27
 */
public class 统计数组中峰和谷的数量_2210 {

    public static void main(String[] args) {

    }

    /**
     * 遍历+双指针
     * 连续相同的数字，要当成一个数字
     */
    public int countHillValley(int[] nums) {
        int cnt = 0;
        for (int i = 1; i < nums.length - 1; ) {
            int nextI = i + 1;
            while (nextI < nums.length && nums[nextI] == nums[i]) {
                nextI++;
            }
            if (nextI < nums.length) {
                if (nums[nextI] > nums[i] && nums[i - 1] > nums[i]) {
                    cnt++;
                } else if (nums[nextI] < nums[i] && nums[i - 1] < nums[i]) {
                    cnt++;
                }
            }
            i = nextI;
        }
        return cnt;
    }

}
